package edu.hunau.cxb19.oop.class10.string;

import org.junit.Test;

/**
 *
 * @author hb
 *
 *         2020-03-06 16:08:33
 */
public class StringTest {

	@Test
	public void test01() {
		// 声明一个字符串
		String str1 = new String("abc");
		// 使用双引号定义字符串常量
		String str2 = "abc";
	}
	@Test
	public void test03() {
		String str1 = "abc";// 直接保存到常量池中
		String str2 = "abc";
		// ==如果是引用类型，那么直接比较对象的地址值
		System.out.println(str1 == str2);// true

		String str3 = new String("abc123");// str3值向堆内存中的String对象
		String str4 = new String("abc123");
		System.out.println(str3 == str4);// false
	}

	@Test
	public void test04() {
		String str1 = "abc123";

		String str2 = "abc" + "123";//表达式都是常量，在编译时直接计算 
		String str22 = "abc1" + 2 + 3;//表达式都是常量，在编译时获得结果，等价于"abc123"
		
		System.out.println(str1 == str2);//true
		System.out.println(str1 == str22);//true

		String str3 = "abc";
		//str4底层的实现是通过new StringBuilder,然后通过StringBuilder#append方获得结果。
		String str4 = str3 + "123";
		System.out.println(str1 == str4);//false

		final String str5 = "abc";
		String str6 = str5 + "123";//str5使用final修饰，编译时作为常量处理等价于"abc"+"123"
		System.out.println(str1 == str6);//true

	}
}
